/**
 * @file dbactivite.c
 * @brief Fichier source du module dbactivite.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

/* *********************************************************************

                       Librairies de dbactivite                          

********************************************************************* */

#include "dbactivite.h"

/* *********************************************************************

                        Fonctions                                      

********************************************************************* */

void recuperation_DAct(Ensemble * element, const int id)
{
  if(element)
    {
      DataBase data;
      ouvrir_Db();
      prepare_Db(&data, "select rowid, id_personne,  type, principale from activite where id_oeuvre =  ?");
      bindValueInt_Db(&data, 1, id);

      while(execute_Db(&data))
	{
	  Activite act;
	  Personne *per = creer_Per();
	  init_Act(&act);
	  setId_Act(&act, getValueInt_Db(&data,0));

	  /* Recuperation de la personne */
	  
	  recuperationOeuvre_DPer(&per, getValueInt_Db(&data, 1));
	  
	  setPersonne_Act(&act, per);
	  
	  detruire_Per(&per);
	  
	  setActivite_Act(&act, getValueText_Db(&data, 2));
	  setPrincipal_Act(&act, (char) getValueInt_Db(&data, 3));

	  insert_Ens(element, &act, creer_Act, copier_Act);

	  liberer_Act(&(act));
	}
      finalise_Db(&data);
    }
}

void insertion_DAct(Ensemble *ens, const int id)
{
  if(ens)
    {
      int tailleEns, i;
      ouvrir_Db();
      tailleEns = getTaille_Ens(ens);
      prems_Ens(ens);
      for(i = 0; i < tailleEns; i++)
	{
	  DataBase data;
	  insertion_DPer(getPersonne_Act(getData_Ens(ens)));
	  if(getSup_Ens(ens) == 1)
	    {
	      prepare_Db(&data, "delete from activite where rowid = ?");
	      bindValueInt_Db(&data, 1, getId_Act(getData_Ens(ens)));
	    }
	  else if(getId_Act(getData_Ens(ens)) == 0)
	    {
	      prepare_Db(&data, "insert into activite (id_personne, id_oeuvre, type, principale) values (?, ?, ?, ?)");
	    }
	  else
	    {
	      if(getMaj_Ens(ens) == 1)
		{
		  prepare_Db(&data, "update activite set id_personne = ?, id_oeuvre = ?, type = ?, principale = ? where rowid = ?");
		  bindValueInt_Db(&data, 5, getId_Act(getData_Ens(ens)));
		}
	    }
	  if(getSup_Ens(ens) == 0 && (getMaj_Ens(ens) == 1 || getId_Act(getData_Ens(ens)) == 0))
	    {
	      bindValueInt_Db(&data, 1, getId_Per(getPersonne_Act(getData_Ens(ens))));
	      bindValueInt_Db(&data, 2, id);
	      bindValueText_Db(&data, 3, getActivite_Act(getData_Ens(ens)));
	      bindValueInt_Db(&data, 4, getPrincipal_Act(getData_Ens(ens)));
	    }
	  if(getId_Act(getData_Ens(ens)) == 0 ||
	     getSup_Ens(ens) == 1 ||
	     getMaj_Ens(ens) == 1)
	    {
	      if(execute_Db(&data))
		{
		  
		}
	      finalise_Db(&data);
	    }
	  if(getId_Act(getData_Ens(ens)) == 0 && getSup_Ens(ens) == 0)
	    {
	      prepare_Db(&data, "select max(rowid) from activite");
	      if(execute_Db(&data))
		{
		  setId_Act(getData_Ens(ens), getValueInt_Db(&data, 0));
		}
	      finalise_Db(&data);
	    }
	  suivant_Ens(ens);
	}
    }
}
